package tankgame03;

import java.util.Timer;
import java.util.TimerTask;

/**
 * 敌人的坦克
 * 注意，写并发程序时，一定要考虑清楚，该线程什么时候结束
 */
public class EnemyTank extends Tank implements Runnable {
    boolean isLive = true;
    private static final int AUTO_SHOT_INTERVAL = 3000; // 自动射击的时间间隔，单位为毫秒
    private Timer timer;

    public EnemyTank(int x, int y) {
        super(x, y);
        startAutoShoot();
    }

    //使用后台线程中执行类 Timer 和 TimerTask 抽象类，
    //来定时执行自动射击操作
    private void startAutoShoot() {
        timer = new Timer();
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                shotTank(); // 调用父类的射击方法
            }
        }, 1000, AUTO_SHOT_INTERVAL); // 初始延迟为1000，每隔 AUTO_SHOT_INTERVAL 执行一次
    }

    //把敌方坦克每次移动的随机步数设置成方法
    public int EnemyTankStepCount() {
        return (int) Math.random() * 100 + 10;
    }

    //把每次移动需要进行的休眠封装成方法
    public void EnemyTankStepSleep() {
        try {
            Thread.sleep(50);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void run() {
        //设置坦克的自动移动
        while (isLive) {
            //根据坦克的方向来移动
            switch (getDirection()) {
                case 0://上
                    for (int i = 0; i < EnemyTankStepCount(); i++) {
                        if (!isTouchTank()) {
                            moveUp();
                        }
                        //休眠,不休眠可能会到处乱转
                        EnemyTankStepSleep();
                    }
                    break;
                case 1://下
                    for (int i = 0; i < EnemyTankStepCount(); i++) {
                        if (!isTouchTank()) {
                            moveDown();
                        }
                        EnemyTankStepSleep();
                    }
                    break;
                case 2://左
                    for (int i = 0; i < EnemyTankStepCount(); i++) {
                        if (!isTouchTank()) {
                            moveLeft();
                        }
                        EnemyTankStepSleep();
                    }
                    break;
                case 3://右
                    for (int i = 0; i < EnemyTankStepCount(); i++) {
                        if (!isTouchTank()) {
                            moveRight();
                        }
                        EnemyTankStepSleep();
                    }
                    break;
            }
            //然后随机的改变方向,0~3
            setDirection((int) (Math.random() * 4));
            if (!isLive) {//isLive为false时，退出线程
                break;//退出线程
            }
        }
    }

}
